package com.yeyks.commonReference.service.hotel;

import com.baomidou.mybatisplus.extension.service.IService;
import com.yeyks.account.dal.domain.AccountInfo;
import com.yeyks.common.ajax.AjaxResponseBody;
import com.yeyks.common.appcommon.dto.room.AppRoomBedTypeDTO;
import com.yeyks.common.appcommon.dto.room.AppRoomDetailInfoDTO;
import com.yeyks.common.appcommon.dto.room.AppRoomDevicesDTO;
import com.yeyks.common.appcommon.dto.room.AppRoomInfoDTO;
import com.yeyks.common.appcommon.param.room.*;
import com.yeyks.common.appcommon.result.CommonResult;
import com.yeyks.common.base.RoomInfoDevicesJson;
import com.yeyks.common.base.RoomInfoRoomInfoJson;
import com.yeyks.common.param.UpdateVipRoomParam;
import com.yeyks.hotel.dal.domain.RoomCalendarInfo;
import com.yeyks.hotel.dal.domain.RoomInfo;
import com.yeyks.hotel.dto.RoomInfoDetailDTO;

import java.util.List;
import java.util.Map;


/**
 * <p>
 * 房间表 服务类
 * </p>
 *
 * @author yun
 * @since 2019-06-25
 */
public interface RoomInfoService extends IService<RoomInfo> {
    RoomInfo selectByPrimaryKey(Integer roomId);

    /**
     * 添加c2b房间，返回初始化的一个月的房态信息
     *
     * @param roomInfo
     * @return
     */
    RoomInfo addRoomInfo(RoomInfo roomInfo);

    /**
     * 通过房间id获取房间详情
     *
     * @param roomId
     * @return
     */
    RoomInfoDetailDTO roomDetail(Integer roomId);

    /**
     * 通过id进行删除（将isDel字段修改为0）
     *
     * @param id
     * @return
     */
    int deleteById(Integer id, Integer isDel);

    AjaxResponseBody toBeVipRoom(UpdateVipRoomParam updateVipRoomParam);

    AjaxResponseBody cancelVipRoom(Integer roomId);

    AjaxResponseBody updateVipRoomStatus(Integer roomId, Integer status);

    AjaxResponseBody updateJipRoomStatus(Integer roomId, Integer status);

    /**
     * 通过roomIds获取房间信息
     *
     * @param roomIds
     * @return
     */
    List<RoomInfo> selectByIds(List<Integer> roomIds);

    /**
     * 查询一个用户下的所有房间管辖，并返回房间信息
     *
     * @param loginUserId
     * @return
     */
    List<RoomInfo> searchRoomByOperator(Integer loginUserId);

    /**
     * 查询酒店房间列表，包括当日价格区间信息
     *
     * @param hotelId
     * @param vipFlag
     * @return
     */
    List<RoomInfo> queryRoomListByHotelId(Integer hotelId, Integer vipFlag);

    /**
     * 查询酒店房间去区分vip标识，显示房态价格
     * @param hotelId
     * @return
     */
    List<RoomInfo> searchRoomByHotelId(Integer hotelId);



    /**
     * 房间床型转中文
     */
    void roomBedTypeCn();

    /**
     * 设备转中文
     */
    void roomDevice();

    /**
     * 根据指定条件查询C2b房间对象
     *
     * @param map
     * @return
     */
    List<RoomInfo> getRoomInfos(Map<String, Object> map);

    /**
     * admin - app 获取客房床型接口
     *
     * @param convert 操作人
     * @return 返回集合信息
     */
    CommonResult<List<AppRoomBedTypeDTO>> getBedTypeList(AccountInfo convert);

    /**
     * 获取客房服务设备接口
     *
     * @param convert 操作人
     * @return 返回集合信息
     */
    CommonResult<List<AppRoomDevicesDTO>> getDevicesList(AccountInfo convert);

    /**
     * admin - app 获取客房床型接口(1.7.0)
     *
     * @param convert 操作人
     * @return 返回集合信息
     */
    CommonResult<List<RoomInfoRoomInfoJson>> getRoomInfoJsonList(AccountInfo convert);

    /**
     * 获取客房服务设备接口(1.7.0)
     *
     * @param convert 操作人
     * @return 返回集合信息
     */
    CommonResult<List<RoomInfoDevicesJson>> getDevicesJsonList(AccountInfo convert);

    /**
     * admin - app 查询酒店的所有的客房
     *
     * @param queryRoomParam 查询条件
     * @param convert        操作人
     * @return 返回分页结果
     */
    CommonResult<List<AppRoomInfoDTO>> pageList(QueryRoomParam queryRoomParam, AccountInfo convert);

    /**
     * admin - app 添加酒店的客房
     *
     * @param addRoomInfoParam 添加参数
     * @param convert          操作人
     * @return 返回添加结果
     */
    CommonResult addRoom(AddRoomInfoParam addRoomInfoParam, AccountInfo convert);

    /**
     * admin - app 获取客房详情信息
     *
     * @param getRoomParam 获取输入参数
     * @param convert      操作人
     * @return 返回添加结果
     */
    CommonResult<AppRoomDetailInfoDTO> getRoom(GetRoomParam getRoomParam, AccountInfo convert);

    /**
     * 删除房间
     *
     * @param delRoomParam 删除输入参数
     * @param convert      操作人
     * @return 返回删除结果
     */
    CommonResult delRoom(DelRoomParam delRoomParam, AccountInfo convert);

    /**
     * 上下架 客房信息
     *
     * @param updateValidRoomParam 编辑输入参数
     * @param convert              操作人
     * @return 返回操作结果
     */
    CommonResult validRoom(UpdateValidRoomParam updateValidRoomParam, AccountInfo convert);

    /**
     * 更新 客房中的所有字段信息
     *
     * @param updateRoomInfoParam 编辑输入参数
     * @param convert             操作人
     * @return 返回操作结果
     */
    CommonResult updateAnyParamRoom(UpdateRoomInfoParam updateRoomInfoParam, AccountInfo convert);

    /**
     * admin - app 老版修改客房基本信息
     *
     * @param updateRoomInfoParam 编辑输入参数
     * @param convert             操作人
     * @return 返回操作结果
     */
    CommonResult updateRoom(UpdateRoomInfoParam updateRoomInfoParam, AccountInfo convert);

    /**
     * admin - app 上下架优享VIP酒店
     *
     * @param updateValidRoomParam 输入参数
     * @param convert 操作人
     * @return 返回操作结果
     */
    CommonResult validRoomMinVip(UpdateValidRoomParam updateValidRoomParam, AccountInfo convert);

    /**
     * 升级优享VIP客房
     * @param param 输入参数
     * @param convert 操作人
     * @return 返回结果
     */
    CommonResult upgradeJipRoom(UpdateUpgradeMinVipParam param, AccountInfo convert);
}
